package exercise;

import java.util.*;

class Student implements Comparable {
	String name;
	int ban;
	int no;
	int kor,eng,math;
	
	int total;	//총점
	int schoolRank;//전교등수
	int classRank; //반등수
	
	Student(String name, int ban, int no, int kor, int eng, int math) {
		this.name = name;
		this.ban = ban;
		this.no = no;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
		
		total = kor+eng+math;
	}

	int getTotal(){
		return total;
	}
	
	float getAverage(){
		return (int)((getTotal()/3f)*10+0.5)/10f;
	}
	
	public String toString(){
		return name +","+ban +","+no +","+kor +","+eng +","+math
		+","+getTotal() +","+getAverage()+","+ schoolRank +"," + classRank;
	}
	




	
/*	
	public int compareTo(Object o1) {
		// TODO Auto-generated method stub
		if(o1 instanceof Student){
			Student tmp = (Student)o1;
			return name.compareTo(tmp.name);
		}else{
			return -1;
		}
	}*/
	public static void calculateSchoolRank(List list) {
		Collections.sort(list); // 먼저 list를 총점기준 내림차순으로 정렬한다.
		int prevRank = -1; // 이전 전교등수
		int prevTotal = -1; // 이전 총점
		int length = list.size();
		/*
		(2) 아래의 로직에 맞게 코드를 작성하시오.
		1. 반복문을 이용해서 list에 저장된 Student객체를 하나씩 읽는다.
		*/
		for(int i=0;i<length;i++){
			Student s = (Student)list.get(i);
			/*
			1.1 총점(total)이 이전총점(prevTotal)과 같으면
			이전 등수(prevRank)를 등수(schoolRank)로 한다.
			1.2 총점이 서로 다르면,
			등수(schoolRank)의 값을 알맞게 계산해서 저장한다.
			이전에 동점자 였다면, 그 다음 등수는 동점자의 수를 고려해야한다.
			(실행결과 참고)
			1.3 현재 총점과 등수를 이전총점(prevTotal)과 이전등수(prevRank)에
			저장한다.
			*/
			if(s.total==prevTotal){
				prevRank = s.schoolRank;
			}else{
				s.schoolRank =i +1;
			}
			prevTotal = s.total;
			prevRank = s.schoolRank;
			
		}
		
		}

@Override
public int compareTo(Object o1) {
	if(o1 instanceof Student){
		Student st = (Student)o1;
		return st.total-this.total; //총점기준(내림차순)으로 정렬.
	}
	return -1;
}


}

class ClassTotalComparator implements Comparator {

	@Override
	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		if(o1 instanceof Student && o2 instanceof Student){
			Student st1 = (Student)o1;
			Student st2 = (Student)o2;
			int result= st1.ban-st2.ban; //반기준오름차순.
			if(result == 0){
				result = st2.total - st1.total; //총점(total)기준 정렬(내림차순)
			}
			return result;
		}
		return 0;
	}
	
}

